package borrador;

import java.util.LinkedList;
import java.util.List;

import logica.*;

public class BoleteriaTeatro
{
	private Proyecto proy;
	private Diagrama diag;
	
	private Entidad seccionSala;
	private Entidad localidad;
	private Entidad obra;
	private Entidad funcion;
	
	private Relacion sl;
	private Relacion vtaLoc;
	private Relacion fo;
	private Entidad lala; // q creativo :P
	
	public BoleteriaTeatro() throws AtributoRepetidoException, RelacionException, AtributoSimpleException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException, EntidadRepetidaException, IdExternoInexistenteException
	{
		crearEntidadSeccion();
		crearEntidadObra();
		crearEntidadLocalidad();
		crearEntidadFuncion();
		crearRelacionSl();
		crearRelacionVtaLoc();
		crearRelacionFo();
		crearEntidadLocalidadLALA();
		crearEstructuraProyecto();
	}
	
	public String getNombre() {
		return "proyecto-boleteriaTeatro";
	}
	
	
	public Entidad getSeccionSala() {
		return seccionSala;
	}

	public void setSeccionSala(Entidad seccionSala) {
		this.seccionSala = seccionSala;
	}

	public Entidad getLocalidad() {
		return localidad;
	}

	public void setLocalidad(Entidad localidad) {
		this.localidad = localidad;
	}

	public Entidad getObra() {
		return obra;
	}

	public void setObra(Entidad obra) {
		this.obra = obra;
	}

	public Entidad getFuncion() {
		return funcion;
	}

	public void setFuncion(Entidad funcion) {
		this.funcion = funcion;
	}

	public Relacion getSl() {
		return sl;
	}

	public void setSl(Relacion sl) {
		this.sl = sl;
	}

	public Relacion getVtaLoc() {
		return vtaLoc;
	}

	public void setVtaLoc(Relacion vtaLoc) {
		this.vtaLoc = vtaLoc;
	}

	public Relacion getFo() {
		return fo;
	}

	public void setFo(Relacion fo) {
		this.fo = fo;
	}

	private void crearEntidadSeccion() throws AtributoRepetidoException, SinNombreException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException 
	{
		seccionSala = new Entidad("SeccionSala");
		seccionSala.setTipo(TipoDeEntidad.COSA);
		
		Atributo nroSecc = new AtributoSimple("nroSecc");
		Atributo nomSecc = new AtributoSimple("nomSecc");
		
		seccionSala.agregarAtributo(nroSecc);
		seccionSala.agregarAtributo(nomSecc);
		
		Identificador id1 = new Identificador();
		id1.agregarAtributoIdentificador(nroSecc);
		Identificador id2 = new Identificador();
		id2.agregarAtributoIdentificador(nomSecc);
		
		seccionSala.agregarIdentificador(id1);
		seccionSala.agregarIdentificador(id2);		
	}
	
	private void crearEntidadObra() throws AtributoRepetidoException, SinNombreException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException 
	{
		obra = new Entidad("Obra");
		obra.setTipo(TipoDeEntidad.COSA);
		
		Atributo idObra = new AtributoSimple("idObra");
		Atributo titulo = new AtributoSimple("titulo");
		
		obra.agregarAtributo(idObra);
		obra.agregarAtributo(titulo);
		obra.agregarAtributo(new AtributoSimple("genero"));
		obra.agregarAtributo(new AtributoSimple("nroProxFunc"));
		obra.agregarAtributo(new AtributoSimple("autor", 1, -1));
		obra.agregarAtributo(new AtributoSimple("director", 1, -1));
		
		Identificador id1 = new Identificador();
		id1.agregarAtributoIdentificador(idObra);
		Identificador id2 = new Identificador();
		id2.agregarAtributoIdentificador(titulo);
		
		obra.agregarIdentificador(id1);
		obra.agregarIdentificador(id2);
	}

	private void crearEntidadLocalidad() throws AtributoRepetidoException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		localidad = new Entidad("Localidad");
		localidad.setTipo(TipoDeEntidad.COSA);

		Atributo fila = new AtributoSimple("fila");
		Atributo nroButaca = new AtributoSimple("nroButaca");
		
		localidad.agregarAtributo(fila);
		localidad.agregarAtributo(nroButaca);
		
		localidad.agregarEntidadExterna(seccionSala);
		
		Identificador id = new Identificador();
		id.agregarAtributoIdentificador(fila);
		id.agregarAtributoIdentificador(nroButaca);
		id.agregarEntidadIdentificadora(seccionSala);
		
		localidad.agregarIdentificador(id);
	}
	
	private void crearEntidadLocalidadLALA() throws AtributoRepetidoException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		lala = new Entidad("lala");
		
		Atributo fila = new AtributoSimple("fila");
		Atributo nroButaca = new AtributoSimple("nroButaca");
		
		lala.agregarAtributo(fila);
		lala.agregarAtributo(nroButaca);
		
		
		Identificador id = new Identificador();
		id.agregarAtributoIdentificador(fila);
		id.agregarAtributoIdentificador(nroButaca);

		
		lala.agregarIdentificador(id);
	}
	
	private void crearEntidadFuncion() throws AtributoRepetidoException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		funcion = new Entidad("Funcion");
		funcion.setTipo(TipoDeEntidad.COSA);

		Atributo nroFunc = new AtributoSimple("nroFunc");
		Atributo fecha = new AtributoSimple("fecha");
		Atributo hora = new AtributoSimple("hora");
		
		funcion.agregarAtributo(hora);
		funcion.agregarAtributo(fecha);
		funcion.agregarAtributo(nroFunc);
		
		funcion.agregarEntidadExterna(obra);
		
		Identificador id1 = new Identificador();
		id1.agregarAtributoIdentificador(nroFunc);
		id1.agregarEntidadIdentificadora(obra);
	
		funcion.agregarIdentificador(id1);
		
		Identificador id2 = new Identificador();
		id2.agregarAtributoIdentificador(fecha);
		id2.agregarAtributoIdentificador(hora);
		id2.agregarEntidadIdentificadora(obra);
		
		funcion.agregarIdentificador(id2);
	}
	
	private void crearRelacionSl() throws RelacionException, SinNombreException
	{
		List<EntidadRol> entidades = new LinkedList<EntidadRol>();
		
		entidades.add(new EntidadRol(seccionSala, "", 1, -1));
		entidades.add(new EntidadRol(localidad, "", 1, 1));
		
		sl = new Relacion("SL", entidades);
		sl.setTipo(TipoDeRelacion.ASOCIACION);
	}
	
	private void crearRelacionFo() throws RelacionException, SinNombreException
	{
		List<EntidadRol> entidades = new LinkedList<EntidadRol>();
		
		entidades.add(new EntidadRol(obra, "", 0, -1));
		entidades.add(new EntidadRol(funcion, "", 1, 1));
		
		fo = new Relacion("FO", entidades);
		fo.setTipo(TipoDeRelacion.ASOCIACION);
	}
	
	private void crearRelacionVtaLoc() throws RelacionException, AtributoRepetidoException, AtributoSimpleException, SinNombreException
	{
		List<EntidadRol> entidades = new LinkedList<EntidadRol>();
		
		entidades.add(new EntidadRol(localidad, "", 0, -1));
		entidades.add(new EntidadRol(obra, "", 0, -1));
		
		vtaLoc = new Relacion("VtaLoc", entidades);
		vtaLoc.setTipo(TipoDeRelacion.ASOCIACION);
		
		Atributo tarj = new AtributoCompuesto("tarj");
		
		tarj.setCardinalidad(0, 1);
		tarj.agregarAtributo(new AtributoSimple("nomTarj"));
		tarj.agregarAtributo(new AtributoSimple("bco"));
		tarj.agregarAtributo(new AtributoSimple("nroTarj"));
		tarj.agregarAtributo(new AtributoSimple("nroAutoriz"));
		
		Atributo cr = new AtributoCompuesto("cr");
		
		cr.setCardinalidad(0, 1);
		cr.agregarAtributo(new AtributoSimple("cuotas"));
		cr.agregarAtributo(new AtributoSimple("int", 0, 1));
		tarj.agregarAtributo(cr);

		vtaLoc.agregarAtributo(tarj);
				
	}
	
	private void crearEstructuraProyecto () throws EntidadRepetidaException, IdExternoInexistenteException, SinNombreException 
	{
		proy = new Proyecto(this.getNombre());
		diag = proy.getDiagramaPpal();
			
		diag.agregarObjetoDiagrama(this.getSeccionSala());
		diag.agregarObjetoDiagrama(this.getLocalidad());
		diag.agregarObjetoDiagrama(this.getObra());
		diag.agregarObjetoDiagrama(this.getFuncion());
		diag.agregarObjetoDiagrama(this.getSl());
		diag.agregarObjetoDiagrama(this.getVtaLoc());
		diag.agregarObjetoDiagrama(this.getFo());
			

				
		
	}
	
	public Proyecto getProyecto () {
		return proy;
	}
}
